﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Data.SqlClient;

namespace LI4.Data
{
    class Anuncio
    {
        private Ligacao ligacao;

        public Anuncio()
        {
            ligacao = new Ligacao();
        }

        public int inserir(Business.Anuncio anuncio)
        {

            string descricao = "Inseriu anuncio de utilizador: " + anuncio.Username + ".";
            SqlParameter[] paramts = new SqlParameter[12];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@cod_area", anuncio.Area.Cod_Area);
            paramts[2] = new SqlParameter("@username", anuncio.Username);
            paramts[3] = new SqlParameter("@descricao", anuncio.Descricao);
            paramts[4] = new SqlParameter("@rua", anuncio.Rua);
            paramts[5] = new SqlParameter("@cod_postal", anuncio.CodPostal);
            paramts[6] = new SqlParameter("@cod_localidade", anuncio.Localidade.CodLocalidade);
            paramts[7] = new SqlParameter("@latitude", anuncio.Latitude);
            paramts[8] = new SqlParameter("@longitude", anuncio.Longitude);
            paramts[9] = new SqlParameter("@registoD", descricao);
            paramts[10] = new SqlParameter("@data", data);
            paramts[11] = new SqlParameter("@userOp", Program.Login.Username);

            try
            {
                ligacao.runProcedure("dbo.inserirAnuncio", paramts);
            }
            catch { }

            return (int)ligacao.mySqlCommand.Parameters[0].Value;
        }

        public int update(Business.Anuncio anuncio)
        {

            string descricao = "Editou anuncio: " + anuncio.CodAnuncio + ".";
            SqlParameter[] paramts = new SqlParameter[13];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@cod_anuncio", anuncio.CodAnuncio);
            paramts[2] = new SqlParameter("@cod_area", anuncio.Area.Cod_Area);
            paramts[3] = new SqlParameter("@username", anuncio.Username);
            paramts[4] = new SqlParameter("@descricao", anuncio.Descricao);
            paramts[5] = new SqlParameter("@rua", anuncio.Rua);
            paramts[6] = new SqlParameter("@cod_postal", anuncio.CodPostal);
            paramts[7] = new SqlParameter("@cod_localidade", anuncio.Localidade.CodLocalidade);
            paramts[8] = new SqlParameter("@latitude", anuncio.Latitude);
            paramts[9] = new SqlParameter("@longitude", anuncio.Longitude);
            paramts[10] = new SqlParameter("@registoD", descricao);
            paramts[11] = new SqlParameter("@data", data);
            paramts[12] = new SqlParameter("@userOp", Program.Login.Username);

            try
            {
                ligacao.runProcedure("dbo.updateAnuncio", paramts);
            }
            catch { }

            return (int)ligacao.mySqlCommand.Parameters[0].Value;


        }
        public int remover(Business.Anuncio anuncio)
        {
          
            string descricao = "Removeu anuncio: " + anuncio.CodAnuncio + ".";
            SqlParameter[] paramts = new SqlParameter[5];
            string data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

            paramts[0] = new SqlParameter();
            paramts[0].ParameterName = "@return_value";
            paramts[0].SqlDbType = System.Data.SqlDbType.Int;
            paramts[0].Direction = System.Data.ParameterDirection.ReturnValue;

            paramts[1] = new SqlParameter("@cod_anuncio", anuncio.CodAnuncio);
            paramts[2] = new SqlParameter("@registoD", descricao);
            paramts[3] = new SqlParameter("@data", data);
            paramts[4] = new SqlParameter("@userOp", Program.Login.Username);
            
          
            try
            {
                ligacao.runProcedure("dbo.removerAnuncio", paramts);
            }
            catch { }

            return (int)ligacao.mySqlCommand.Parameters[0].Value;
        }



        public ArrayList getAnunciosCod()
        {

            ArrayList array = new ArrayList();

            SqlDataReader reader;



            ligacao.Select("SELECT Anuncios.cod_anuncio,Anuncios.cod_area,Anuncios.username,Anuncios.descricao,Anuncios.rua,Anuncios.cod_postal,Anuncios.cod_localidade,Anuncios.latitude,Anuncios.longitude, Area.nome, Localidades.nome as nome_localidade,Localidades.cod_distrito,Distritos.nome as nome_dist FROM Anuncios,Area,Localidades,Distritos where Area.cod_area=Anuncios.cod_area and Anuncios.cod_localidade=Localidades.cod_localidade and Distritos.cod_distrito=Localidades.cod_distrito ORDER BY cod_anuncio");


            reader = ligacao.mySqlDataReader;


            while (reader.Read())
            {

                Business.Distrito dist = new LI4.Business.Distrito((int)reader["cod_distrito"], reader["nome_dist"].ToString());
                Business.Localidade local = new LI4.Business.Localidade((int)reader["cod_localidade"], dist, reader["nome_localidade"].ToString());
                Business.Area area = new Business.Area((int)reader["cod_area"], reader["nome"].ToString());

                array.Add(new Business.Anuncio((int)reader["cod_anuncio"], area, reader["username"].ToString(), reader["descricao"].ToString(), reader["rua"].ToString(), local, reader["cod_postal"].ToString(), reader["latitude"].ToString(), reader["longitude"].ToString()));

            }

            reader.Close();

            return array;

        }

        public ArrayList getAnuncios(string username)
        {
            ArrayList array = new ArrayList();
            SqlDataReader reader;

            ligacao.Select("SELECT Anuncios.cod_anuncio,Anuncios.cod_area,Anuncios.username,Anuncios.descricao,Anuncios.rua,Anuncios.cod_postal,Anuncios.cod_localidade,Anuncios.latitude,Anuncios.longitude, Area.nome, Localidades.nome as nome_localidade,Localidades.cod_distrito,Distritos.nome as nome_dist FROM Anuncios,Area,Localidades,Distritos where username='" + username + "' and Area.cod_area=Anuncios.cod_area and Anuncios.cod_localidade=Localidades.cod_localidade and Distritos.cod_distrito=Localidades.cod_distrito");
            reader = ligacao.mySqlDataReader;

            while (reader.Read())
            {
                Business.Distrito dist = new LI4.Business.Distrito((int)reader["cod_distrito"], reader["nome_dist"].ToString());
                Business.Localidade local = new LI4.Business.Localidade((int)reader["cod_localidade"], dist, reader["nome_localidade"].ToString());
                Business.Area area = new Business.Area((int)reader["cod_area"], reader["nome"].ToString());

                array.Add(new Business.Anuncio((int)reader["cod_anuncio"], area, reader["username"].ToString(), reader["descricao"].ToString(), reader["rua"].ToString(), local, reader["cod_postal"].ToString(), reader["latitude"].ToString(), reader["longitude"].ToString()));
            }
            reader.Close();
            return array;
        }

        public ArrayList getAnunciosArea(int areac)
        {
            ArrayList array = new ArrayList();
            SqlDataReader reader;

            ligacao.Select("select * from anuncios where cod_area ='" + areac + "'");

            reader = ligacao.mySqlDataReader;
            Business.Anuncio anuncio = new Business.Anuncio();
            while (reader.Read())
            {
                int cod_anuncio = reader.GetInt32(0);
                int cod_area = reader.GetInt32(1);
                string username = reader.GetString(2);
                string descricao = reader.GetString(3);
                string rua = reader.GetString(4);
                string cod_postal = reader.GetString(5);
                int cod_localidade = reader.GetInt32(6);
                string latitude = reader.GetString(7);
                string longitude = reader.GetString(8);

                Data.Localidade locald = new Data.Localidade();
                Business.Localidade local = new Business.Localidade(locald.getLocalidade(cod_localidade));
                Data.Area aread = new Data.Area();
                Business.Area area = new Business.Area(aread.getArea(cod_area));

                anuncio = new Business.Anuncio(cod_anuncio, area, username, descricao, rua, local, cod_postal, latitude, longitude);
                array.Add(anuncio);
            }

            reader.Close();

            return array;
        }

        public ArrayList getAnunciosLocalidade(int localidadec)
        {
            ArrayList array = new ArrayList();
            SqlDataReader reader;

            ligacao.Select("select * from anuncios where cod_localidade ='" + localidadec + "'");

            reader = ligacao.mySqlDataReader;
            Business.Anuncio anuncio = new Business.Anuncio();
            while (reader.Read())
            {
                int cod_anuncio = reader.GetInt32(0);
                int cod_area = reader.GetInt32(1);
                string username = reader.GetString(2);
                string descricao = reader.GetString(3);
                string rua = reader.GetString(4);
                string cod_postal = reader.GetString(5);
                int cod_localidade = reader.GetInt32(6);
                string latitude = reader.GetString(7);
                string longitude = reader.GetString(8);

                Data.Localidade locald = new Data.Localidade();
                Business.Localidade local = new Business.Localidade(locald.getLocalidade(cod_localidade));
                Data.Area aread = new Data.Area();
                Business.Area area = new Business.Area(aread.getArea(cod_area));

                anuncio = new Business.Anuncio(cod_anuncio, area, username, descricao, rua, local, cod_postal, latitude, longitude);
                array.Add(anuncio);
            }

            reader.Close();

            return array;
        }

        public Business.Anuncio getAnuncio(int codigo)
        {

            SqlDataReader reader;

            ligacao.Select("select * from anuncios where cod_anuncio ='" + codigo + "'");

            reader = ligacao.mySqlDataReader;
            Business.Anuncio anuncio = new Business.Anuncio();
            if (reader.Read())
            {
                int cod_anuncio = reader.GetInt32(0);
                int cod_area = reader.GetInt32(1);
                string username = reader.GetString(2);
                string descricao = reader.GetString(3);
                string rua = reader.GetString(4);
                string cod_postal = reader.GetString(5);
                int cod_localidade = reader.GetInt32(6);
                string latitude = reader.GetString(7);
                string longitude = reader.GetString(8);

                Data.Localidade locald = new Data.Localidade();
                Business.Localidade local = new Business.Localidade(locald.getLocalidade(cod_localidade));
                Data.Area aread = new Data.Area();
                Business.Area area = new Business.Area(aread.getArea(cod_area));

                anuncio = new Business.Anuncio(cod_anuncio, area, username, descricao, rua, local, cod_postal, latitude, longitude);
                reader.Close();
            }

            reader.Close();

            return anuncio;

        }
    }
}
